Questions 11, 20. Perceived risk.

## Create survey object.
options(digits = 4)
options(survey.lonely.psu = "adjust")

des <- svydesign(ids = ~1, weights = ~weight, data = df[is.na(df$weight)==F, ])

Q11. How do you rate your risk of getting influenza if you visited each of the following locations?

# subset question data, rename columns, gather into single column
q11_df <- df %>%
  select(CaseID, PPGENDER, PPAGE, ppagecat, PPETHM, PPINCIMP, PPEDUC, PPEDUCAT,
         work, PPWORK, marital, PPMARIT, PPMSACAT, ppreg9, PPSTATEN, PPHOUSE, PPRENT, PPNET,
         Q11_1:Q11_11, weight) %>%
  rename(Work = Q11_1,
         Schools = Q11_2,
         Day_care = Q11_3,
         Stores = Q11_4,
         Restaurants = Q11_5,
         Libraries = Q11_6,
         Hospitals = Q11_7,
         Doctors_office = Q11_8,
         Public_transp = Q11_9,
         Family_friends = Q11_10,
         Other = Q11_11) %>%
  gather(Q11_q, Q11_r, Work:Other, na.rm = T) %>%
  mutate(Q11_q = as.factor(Q11_q))

# survey design
options(digits = 4)
options(survey.lonely.psu = "adjust")
des11 <- svydesign(ids = ~1, weights = ~weight, data = q11_df[is.na(q11_df$weight)==F, ])

Gender, age, ethnicity, income

# weighted data frame
q11 <- data.frame(svytable(~Q11_q + Q11_r + PPGENDER + ppagecat + PPETHM + PPINCIMP, des11, round = T))

# plot templates
title <- ggtitle("How do you rate your risk of getting influenza if you visited each of the following locations?")

## main plot
p <- ggplot(q11, aes(Q11_q, weight = Freq)) + ptext
p + geom_bar(position = 'fill') + aes(fill = Q11_r) + title

# plot2: exclude 'Don_t know' response
p2 <- ggplot(q11[q11$Q11_r != "Don_t Know", ], aes(Q11_q, weight = Freq)) + ptext
p2 + geom_bar(position = "fill") + aes(Q11_q, fill = Q11_r)

p2 + geom_bar() + aes(Q11_r, fill = Q11_r) + facet_wrap(~Q11_q) + ptext2

p2 + geom_bar() + aes(Q11_q, fill = Q11_q) + facet_wrap(~Q11_r) + ptext2

# select 'High Risk' response only?
#px <- ggplot(q11[q11$Q11_r == "High Risk", ], aes(weight = Freq)) + ptext

# by gender
p2 + geom_bar() + aes(PPGENDER, fill = Q11_r) + facet_wrap(~Q11_q) + ggtitle("By gender")

p2 + geom_bar(position = "fill") + aes(PPGENDER, fill = Q11_r) + facet_wrap(~Q11_q)

p2 + geom_bar() + aes(Q11_q, fill = PPGENDER) + facet_wrap(~Q11_r)

p2 + geom_bar(position = 'fill') + aes(Q11_q, fill = PPGENDER) + facet_wrap(~Q11_r) + ggtitle("By gender")

p2 + geom_bar() + aes(PPGENDER, fill = PPGENDER) + facet_grid(Q11_q~Q11_r) + coord_flip() + ptext2

# age boxplot
# need to subset by group
svyboxplot(PPAGE~Q11_q, des11, main = "Age boxplot per response")

# by age group
p2 + geom_bar() + aes(ppagecat, fill = Q11_r) + facet_wrap(~Q11_q) + ggtitle("By age group")

p2 + geom_bar(position = "fill") + aes(ppagecat, fill = Q11_r) + facet_wrap(~Q11_q)

p2 + geom_bar() + aes(Q11_q, fill = ppagecat) + facet_wrap(~Q11_r)

p2 + geom_bar(position = 'fill') + aes(Q11_q, fill = ppagecat) + facet_wrap(~Q11_r) + ggtitle("By age group")

p2 + geom_bar() + aes(ppagecat, fill = ppagecat) + facet_grid(Q11_q~Q11_r) + ptext2

# by ethnic group
p2 + geom_bar() + aes(PPETHM, fill = Q11_r) + facet_wrap(~Q11_q) + ggtitle("By ethnic group")

p2 + geom_bar(position = "fill") + aes(PPETHM, fill = Q11_r) + facet_wrap(~Q11_q)

p2 + geom_bar() + aes(Q11_q, fill = PPETHM) + facet_wrap(~Q11_r)

p2 + geom_bar(position = 'fill') + aes(Q11_q, fill = PPETHM) + facet_wrap(~Q11_r) + ggtitle("By ethnic group")

p2 + geom_bar() + aes(PPETHM, fill = PPETHM) + facet_grid(Q11_q~Q11_r) + ptext2

p2 + geom_bar() + aes(Q11_r, fill = Q11_r) + facet_grid(Q11_q~PPETHM) + ptext2

# by income
p2 + geom_bar() + aes(PPINCIMP, fill = Q11_r) + facet_wrap(~Q11_q) + ggtitle("By income") + ptext2

p2 + geom_bar(position = "fill") + aes(PPINCIMP, fill = Q11_r) + facet_wrap(~Q11_q) + ptext2

p2 + geom_bar() + aes(Q11_q, fill = PPINCIMP) + facet_wrap(~Q11_r)

p2 + geom_bar(position = 'fill') + aes(Q11_q, fill = PPINCIMP) + facet_wrap(~Q11_r) + ggtitle("By income group")

p2 + geom_bar() + aes(PPINCIMP, fill = PPINCIMP) + facet_grid(Q11_q~Q11_r) + ptext2

Education, work, marital status

# update weighted data frame
q11.2 <- data.frame(svytable(~Q11_q + Q11_r + PPEDUC + PPEDUCAT + work + PPWORK + marital + PPMARIT, des11, round = T))

# restate plots
p3 <- ggplot(q11.2[q11.2$Q11_r != "Don_t Know", ], aes(Q11_q, weight = Freq)) + ptext
# by education
p3 + geom_bar() + aes(PPEDUCAT, fill = Q11_r) + facet_wrap(~Q11_q) + ggtitle("By education")

p3 + geom_bar(position = "fill") + aes(PPEDUCAT, fill = Q11_r) + facet_wrap(~Q11_q)

p3 + geom_bar() + aes(Q11_q, fill = PPEDUCAT) + facet_wrap(~Q11_r)

p3 + geom_bar(position = 'fill') + aes(Q11_q, fill = PPEDUCAT) + facet_wrap(~Q11_r) + ggtitle("By education")

p3 + geom_bar() + aes(PPEDUCAT, fill = PPEDUCAT) + facet_grid(Q11_q~Q11_r) + ptext2

p3 + geom_bar() + aes(Q11_r, fill = Q11_r) + facet_grid(Q11_q~PPEDUCAT) + ptext2

# by work
p3 + geom_bar() + aes(work, fill = Q11_r) + facet_wrap(~Q11_q) + ggtitle("By employment status")

p3 + geom_bar(position = "fill") + aes(work, fill = Q11_r) + facet_wrap(~Q11_q)

# by marital
p3 + geom_bar() + aes(marital, fill = Q11_r) + facet_wrap(~Q11_q) + ggtitle("By marital status")

p3 + geom_bar(position = "fill") + aes(marital, fill = Q11_r) + facet_wrap(~Q11_q)

Metro status, region, state, house type, housing status, internet availability

# update weighted data frame
q11.3 <- data.frame(svytable(~Q11_q + Q11_r + PPMSACAT + ppreg9 + PPSTATEN + PPHOUSE + PPRENT + PPNET, des11, round = T))

# restate plots
p4 <- ggplot(q11.3[q11.3$Q11_r != "Don_t Know", ], aes(Q11_q, weight = Freq)) + ptext
# by metro status
p4 + geom_bar(position = "fill") + aes(Q11_r, fill = PPMSACAT) + facet_wrap(~Q11_q) + ggtitle("By metro status")

p4 + geom_bar(position = "fill") + aes(PPMSACAT, fill = Q11_r) + facet_wrap(~Q11_q)

# by region
p4 + geom_bar(position = "fill") + aes(Q11_r, fill = ppreg9) + facet_wrap(~Q11_q) + ggtitle("By region")

p4 + geom_bar() + aes(ppreg9, fill = Q11_r) + facet_wrap(~Q11_q) + ggtitle("By region")

# by state
p4 + geom_bar() + aes(Q11_r, fill = PPSTATEN) + facet_wrap(~Q11_q) + ggtitle("By state")

p4 + geom_bar() + aes(PPSTATEN, fill = Q11_q) + coord_flip() + ggtitle("By state")

# by house type
p4 + geom_bar(position = "fill") + aes(Q11_r, fill = PPHOUSE) + facet_wrap(~Q11_q)

p4 + geom_bar(position = "fill") + aes(fill = PPHOUSE) + ggtitle("By house type")

# housing status
p4 + geom_bar(position = "fill") + aes(Q11_r, fill = PPHOUSE) + facet_wrap(~Q11_q)

p4 + geom_bar() + aes(PPHOUSE, fill = Q11_r) + facet_wrap(~Q11_q) + ggtitle("By housing")

# by internet availability
p4 + geom_bar(position = "fill") + aes(Q11_r, fill = PPNET) + facet_wrap(~Q11_q)

p4 + geom_bar(position = "fill") + aes(PPNET, fill = Q11_r) + facet_wrap(~Q11_q) + ggtitle("By internet availability")

Q20. How effective do you think the influenza vaccine is in protecting people from becoming sick with influenza?

Gender, age, ethnicity, income, education

# weighted data frame
q20 <- data.frame(svytable(~Q20 + PPGENDER + ppagecat + PPETHM + PPINCIMP + 
                             PPEDUC + PPEDUCAT, des, round = T))

# plot templates
title <- ggtitle("How effective do you think the influenza vaccine is in protecting people from becoming sick with influenza?")

## main plot
p <- ggplot(q20, aes(Q20, weight = Freq)) + ptext
p + geom_bar() + title

## plot2: exclude 'Don_t know' column
p2 <- ggplot(q20[!(q20$Q20)=='Don_t know', ], aes(Q20, weight = Freq)) + ptext

# by gender
p + geom_bar() + aes(PPGENDER, fill = PPGENDER) + facet_wrap(~Q20)+ ggtitle("By gender")

p + geom_bar(position = "fill") + aes(PPGENDER, fill = Q20)

# age boxplot
svyboxplot(PPAGE~Q20, des, main = "Age boxplot per response")

# by age group
p + geom_bar() + aes(ppagecat, fill = ppagecat) + facet_wrap(~Q20) + ggtitle("By age group")

p + geom_bar(position = "fill") + aes(ppagecat, fill = Q20) + ggtitle("By age group")

# by ethnic group
p + geom_bar() + aes(PPETHM, fill = PPETHM) + facet_wrap(~Q20) + ggtitle("By ethnic group")

p + geom_bar(position = "fill") + aes(PPETHM, fill = Q20) + ggtitle("By ethnic group")

p + geom_bar(position = "fill") + aes(fill = PPETHM)

p + geom_bar() + aes(fill = PPETHM) + ggtitle("By ethnic group")

p + geom_bar() + aes(fill = Q20) + facet_wrap(~PPETHM) + ggtitle("By ethnic group")

# by income
p2 + geom_bar() + aes(PPINCIMP, fill = PPINCIMP) + facet_wrap(~Q20) + ptext2 + ggtitle("By income")

p2 + geom_bar(position = "fill") + aes(PPINCIMP, fill = Q20) + ggtitle("By income")

p2 + geom_bar() + aes(fill = Q20) + facet_wrap(~PPINCIMP) + ggtitle("By income")

p2 + geom_bar(position = "fill") + aes(fill = PPINCIMP) + ggtitle("By income")

# by education
p + geom_bar() + aes(PPEDUC, fill = PPEDUC) + facet_wrap(~Q20) + ptext2 + ggtitle("By education")

p + geom_bar(position = "fill") + aes(PPEDUC, fill = Q20) + ggtitle("By education")

p + geom_bar() + aes(fill = Q20) + facet_wrap(~PPEDUC) + ggtitle("By education")

p + geom_bar(position = "dodge") + aes(fill = PPEDUCAT) + ggtitle("By education")

p + geom_bar(position = "fill") + aes(fill = PPEDUCAT) + ggtitle("By education")

Marital status, metro status, region, state of residency, house type, housing status, internet availability

# update weighted data frame
q20.2 <- data.frame(svytable(~Q20 + marital + PPMARIT + PPMSACAT + ppreg9 + 
                            PPSTATEN + PPHOUSE + PPRENT + PPNET, des, round = T))
# restate plots
p3 <- ggplot(q20.2, aes(Q20, weight = Freq)) + ptext
p4 <- ggplot(q20.2[!(q20.2$Q20)=='Don_t know', ], aes(Q20, weight = Freq)) + ptext
# by marital
p3 + geom_bar() + aes(marital, fill = marital) + facet_wrap(~Q20) + ggtitle("By marital status")

p3 + geom_bar(position = "fill") + aes(marital, fill = Q20)

p3 + geom_bar() + aes(PPMARIT, fill = PPMARIT) + facet_wrap(~Q20)

p3 + geom_bar() + aes(PPMARIT, fill = Q20) + ggtitle("By marital status")

p3 + geom_bar(position = "fill") + aes(PPMARIT, fill = Q20) + ggtitle("By marital status")

# by metro
p3 + geom_bar() + aes(fill = PPMSACAT) + ggtitle("By metro status")

p3 + geom_bar(position = "fill") + aes(PPMSACAT, fill = Q20)

# by region
p3 + geom_bar() + aes(ppreg9, fill = ppreg9) + facet_wrap(~Q20)+ ggtitle("By region")

p3 + geom_bar(position = "fill") + aes(ppreg9, fill = Q20) + ggtitle("US regions by response")

p3 + geom_bar(position = "fill") + aes(fill = ppreg9) + ggtitle("Responses by US region")

# by state
p3 + geom_bar() + aes(PPSTATEN, fill = Q20) + coord_flip() + ggtitle("By state")

p3 + geom_bar(position = 'fill') + aes(PPSTATEN, fill = Q20) + coord_flip() + ggtitle("By state")

# by house type
p3 + geom_bar(position = 'fill') + aes(fill = PPHOUSE) + ggtitle("By house type")

p3 + geom_bar() + aes(fill = Q20) + facet_wrap(~PPHOUSE) + ggtitle("By house type")

p3 + geom_bar() + aes(PPHOUSE, fill = Q20) + ggtitle("By house type")

p3 + geom_bar(position = "fill") + aes(PPHOUSE, fill = Q20) + ggtitle("By house type")

# by housing status
p3 + geom_bar() + aes(fill = PPRENT) + ggtitle("By housing status")

p3 + geom_bar(position = 'fill') + aes(fill = PPRENT)

p3 + geom_bar() + aes(PPRENT, fill = Q20) + ggtitle("By housing status")

p3 + geom_bar(position = "fill") + aes(PPRENT, fill = Q20) + ggtitle("By housing status")

# by internet availability
p3 + geom_bar() + aes(fill = PPNET) + ggtitle("Internet status")

p3 + geom_bar(position = "fill") + aes(fill = PPNET) + ggtitle("Internet status")

p3 + geom_bar(position = "dodge") + aes(PPNET, fill = Q20) + ggtitle("Internet status")

p3 + geom_bar(position = "fill") + aes(PPNET, fill = Q20) + ggtitle("Internet status")

LS0tCnRpdGxlOiAiQmVoYXZpb3IgcGFydCAyOiBQZXJjZWl2ZWQgcmlzayIKb3V0cHV0OiAKICBodG1sX25vdGVib29rOgogIAogIGh0bWxfZG9jdW1lbnQ6CiAgICBmaWdfY2FwdGlvbjogeWVzCiAgICBmaWdfaGVpZ2h0OiA0CiAgICBmaWdfd2lkdGg6IDYKICAgIHRoZW1lOiBwYXBlcgogICAga2VlcF9tZDogeWVzCiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiAyCi0tLQoKUXVlc3Rpb25zIDExLCAyMC4KUGVyY2VpdmVkIHJpc2suCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GfQojIyBTZXR1cC4Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGVjaG8gPSBULCBjYWNoZSA9IFQsIHdhcm5pbmcgPSBGLCBtZXNzYWdlID0gRiwgc2l6ZSA9ICJzbWFsbCIpCnJtKGxpc3QgPSBscyhhbGwubmFtZXMgPSBUKSkKbGlicmFyeShybWFya2Rvd24pOyBsaWJyYXJ5KGtuaXRyKTsgbGlicmFyeShncmlkRXh0cmEpCmxpYnJhcnkodGlkeXIpOyBsaWJyYXJ5KGRwbHlyKTsgbGlicmFyeShnZ3Bsb3QyKTsgbGlicmFyeShzdXJ2ZXkpCmBgYAoKYGBge3IgbG9hZC1kYXRhLCBpbmNsdWRlPUZ9CiMjIExvYWQgZGF0YS4KbG9hZCgifi9naXQvZmx1LXN1cnZleS9kYXRhL2NsZWFuaW5nMi5SRGF0YSIpCmxvYWQoIn4vZ2l0L2ZsdS1zdXJ2ZXkvZGF0YS9yZWNvZGluZy5SRGF0YSIpICAjIGxvYWQgImRhdGFyIgpkZiA8LSBkYXRhciAgIyByZWNvZGVkIHZhcmlhYmxlcwpgYGAKCmBgYHtyIGdyb3VwLWRhdGEsIGluY2x1ZGU9Rn0KIyMgUmVncm91cCB2YXJpYWJsZXMuCiMgaW5jb21lCmluY29tZS5tYXAgPC0gYyhyZXAoInVuZGVyICQxMGsiLCAzKSwgcmVwKCIkMTBrIHRvICQyNWsiLCA0KSwKICAgICAgICAgICAgICAgIHJlcCgiJDI1ayB0byAkNTBrIiwgNCksIHJlcCgiJDUwayB0byAkNzVrIiwgMiksCiAgICAgICAgICAgICAgICByZXAoIiQ3NWsgdG8gJDEwMGsiLCAyKSwgcmVwKCIkMTAwayB0byAkMTUwayIsIDIpLAogICAgICAgICAgICAgICAgcmVwKCJvdmVyICQxNTBrIiwgMikpCmRmJGluY29tZSA8LSBjb2RlKGRhdGFyJFBQSU5DSU1QLCBpbmNvbWUubWFwLCAidW5kZXIgJDEwayIpCmluY29tZS5sYWIgPC0gYygidW5kZXIgJDEwayIsICIkMTBrIHRvICQyNWsiLCAiJDI1ayB0byAkNTBrIiwKICAgICAgICAgICAgICAgICIkNTBrIHRvICQ3NWsiLCAiJDc1ayB0byAkMTAwayIsICIkMTAwayB0byAkMTUwayIsCiAgICAgICAgICAgICAgICAib3ZlciAkMTUwayIpCmRmJGluY29tZSA8LSBmYWN0b3IoZGYkaW5jb21lLCBsZXZlbHMgPSBpbmNvbWUubGFiKQoKIyBtYXJpdGFsIHN0YXVzCm1hcml0YWwubWFwIDwtIGMoInNpbmdsZSIsICJwYXJ0bmVyZWQiLCAicGFydG5lcmVkIiwgInNpbmdsZSIsICJzaW5nbGUiLCAic2luZ2xlIikKZGYkbWFyaXRhbCA8LSBjb2RlKGRhdGFmJFBQTUFSSVQsIG1hcml0YWwubWFwLCAic2luZ2xlIikKCiMgd29yayBzdGF0dXMKd29yay5tYXAgPC0gYyhyZXAoInVuZW1wbG95ZWQiLCA1KSwKICAgICAgICAgICAgICByZXAoImVtcGxveWVkIiwgMikpCmRmJHdvcmsgPC0gY29kZShkYXRhZiRQUFdPUkssIHdvcmsubWFwLCAidW5lbXBsb3llZCIpCmBgYAoKYGBge3IgZGVzLXN1cnZleX0KIyMgQ3JlYXRlIHN1cnZleSBvYmplY3QuCm9wdGlvbnMoZGlnaXRzID0gNCkKb3B0aW9ucyhzdXJ2ZXkubG9uZWx5LnBzdSA9ICJhZGp1c3QiKQoKZGVzIDwtIHN2eWRlc2lnbihpZHMgPSB+MSwgd2VpZ2h0cyA9IH53ZWlnaHQsIGRhdGEgPSBkZltpcy5uYShkZiR3ZWlnaHQpPT1GLCBdKQpgYGAKCmBgYHtyIHBsb3QtdGVtcCwgaW5jbHVkZT1GfQojIyBDcmVhdGUgZ2dwbG90IHRlbXBsYXRlcy4KcHRleHQgPC0gdGhlbWUoYXhpcy50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSByZWwoMC45KSksCiAgICAgICAgICAgICAgIGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSkpCnB0ZXh0MiA8LSBwdGV4dCArIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF9ibGFuaygpKQpgYGAKCgoKIyMgUTExLiBIb3cgZG8geW91IHJhdGUgeW91ciByaXNrIG9mIGdldHRpbmcgaW5mbHVlbnphIGlmIHlvdSB2aXNpdGVkIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBsb2NhdGlvbnM/CgpgYGB7ciBxMTEtZGF0YX0KIyBzdWJzZXQgcXVlc3Rpb24gZGF0YSwgcmVuYW1lIGNvbHVtbnMsIGdhdGhlciBpbnRvIHNpbmdsZSBjb2x1bW4KcTExX2RmIDwtIGRmICU+JQogIHNlbGVjdChDYXNlSUQsIFBQR0VOREVSLCBQUEFHRSwgcHBhZ2VjYXQsIFBQRVRITSwgUFBJTkNJTVAsIFBQRURVQywgUFBFRFVDQVQsCiAgICAgICAgIHdvcmssIFBQV09SSywgbWFyaXRhbCwgUFBNQVJJVCwgUFBNU0FDQVQsIHBwcmVnOSwgUFBTVEFURU4sIFBQSE9VU0UsIFBQUkVOVCwgUFBORVQsCiAgICAgICAgIFExMV8xOlExMV8xMSwgd2VpZ2h0KSAlPiUKICByZW5hbWUoV29yayA9IFExMV8xLAogICAgICAgICBTY2hvb2xzID0gUTExXzIsCiAgICAgICAgIERheV9jYXJlID0gUTExXzMsCiAgICAgICAgIFN0b3JlcyA9IFExMV80LAogICAgICAgICBSZXN0YXVyYW50cyA9IFExMV81LAogICAgICAgICBMaWJyYXJpZXMgPSBRMTFfNiwKICAgICAgICAgSG9zcGl0YWxzID0gUTExXzcsCiAgICAgICAgIERvY3RvcnNfb2ZmaWNlID0gUTExXzgsCiAgICAgICAgIFB1YmxpY190cmFuc3AgPSBRMTFfOSwKICAgICAgICAgRmFtaWx5X2ZyaWVuZHMgPSBRMTFfMTAsCiAgICAgICAgIE90aGVyID0gUTExXzExKSAlPiUKICBnYXRoZXIoUTExX3EsIFExMV9yLCBXb3JrOk90aGVyLCBuYS5ybSA9IFQpICU+JQogIG11dGF0ZShRMTFfcSA9IGFzLmZhY3RvcihRMTFfcSkpCgojIHN1cnZleSBkZXNpZ24Kb3B0aW9ucyhkaWdpdHMgPSA0KQpvcHRpb25zKHN1cnZleS5sb25lbHkucHN1ID0gImFkanVzdCIpCmRlczExIDwtIHN2eWRlc2lnbihpZHMgPSB+MSwgd2VpZ2h0cyA9IH53ZWlnaHQsIGRhdGEgPSBxMTFfZGZbaXMubmEocTExX2RmJHdlaWdodCk9PUYsIF0pCmBgYAoKIyMjIEdlbmRlciwgYWdlLCBldGhuaWNpdHksIGluY29tZQoKYGBge3IgcTExLXBsb3QtMX0KIyB3ZWlnaHRlZCBkYXRhIGZyYW1lCnExMSA8LSBkYXRhLmZyYW1lKHN2eXRhYmxlKH5RMTFfcSArIFExMV9yICsgUFBHRU5ERVIgKyBwcGFnZWNhdCArIFBQRVRITSArIFBQSU5DSU1QLCBkZXMxMSwgcm91bmQgPSBUKSkKCiMgcGxvdCB0ZW1wbGF0ZXMKdGl0bGUgPC0gZ2d0aXRsZSgiSG93IGRvIHlvdSByYXRlIHlvdXIgcmlzayBvZiBnZXR0aW5nIGluZmx1ZW56YSBpZiB5b3UgdmlzaXRlZCBlYWNoIG9mIHRoZSBmb2xsb3dpbmcgbG9jYXRpb25zPyIpCgojIyBtYWluIHBsb3QKcCA8LSBnZ3Bsb3QocTExLCBhZXMoUTExX3EsIHdlaWdodCA9IEZyZXEpKSArIHB0ZXh0CnAgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICdmaWxsJykgKyBhZXMoZmlsbCA9IFExMV9yKSArIHRpdGxlCmBgYAoKYGBge3IgcTExLXBsb3QtMWJ9CiMgcGxvdDI6IGV4Y2x1ZGUgJ0Rvbl90IGtub3cnIHJlc3BvbnNlCnAyIDwtIGdncGxvdChxMTFbcTExJFExMV9yICE9ICJEb25fdCBLbm93IiwgXSwgYWVzKFExMV9xLCB3ZWlnaHQgPSBGcmVxKSkgKyBwdGV4dApwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhRMTFfcSwgZmlsbCA9IFExMV9yKQpwMiArIGdlb21fYmFyKCkgKyBhZXMoUTExX3IsIGZpbGwgPSBRMTFfcikgKyBmYWNldF93cmFwKH5RMTFfcSkgKyBwdGV4dDIKcDIgKyBnZW9tX2JhcigpICsgYWVzKFExMV9xLCBmaWxsID0gUTExX3EpICsgZmFjZXRfd3JhcCh+UTExX3IpICsgcHRleHQyCgojIHNlbGVjdCAnSGlnaCBSaXNrJyByZXNwb25zZSBvbmx5PwojcHggPC0gZ2dwbG90KHExMVtxMTEkUTExX3IgPT0gIkhpZ2ggUmlzayIsIF0sIGFlcyh3ZWlnaHQgPSBGcmVxKSkgKyBwdGV4dAoKIyBieSBnZW5kZXIKcDIgKyBnZW9tX2JhcigpICsgYWVzKFBQR0VOREVSLCBmaWxsID0gUTExX3IpICsgZmFjZXRfd3JhcCh+UTExX3EpICsgZ2d0aXRsZSgiQnkgZ2VuZGVyIikKcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUFBHRU5ERVIsIGZpbGwgPSBRMTFfcikgKyBmYWNldF93cmFwKH5RMTFfcSkKcDIgKyBnZW9tX2JhcigpICsgYWVzKFExMV9xLCBmaWxsID0gUFBHRU5ERVIpICsgZmFjZXRfd3JhcCh+UTExX3IpCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAnZmlsbCcpICsgYWVzKFExMV9xLCBmaWxsID0gUFBHRU5ERVIpICsgZmFjZXRfd3JhcCh+UTExX3IpICsgZ2d0aXRsZSgiQnkgZ2VuZGVyIikKcDIgKyBnZW9tX2JhcigpICsgYWVzKFBQR0VOREVSLCBmaWxsID0gUFBHRU5ERVIpICsgZmFjZXRfZ3JpZChRMTFfcX5RMTFfcikgKyBjb29yZF9mbGlwKCkgKyBwdGV4dDIKCgojIGFnZSBib3hwbG90CiMgbmVlZCB0byBzdWJzZXQgYnkgZ3JvdXAKc3Z5Ym94cGxvdChQUEFHRX5RMTFfcSwgZGVzMTEsIG1haW4gPSAiQWdlIGJveHBsb3QgcGVyIHJlc3BvbnNlIikKCgojIGJ5IGFnZSBncm91cApwMiArIGdlb21fYmFyKCkgKyBhZXMocHBhZ2VjYXQsIGZpbGwgPSBRMTFfcikgKyBmYWNldF93cmFwKH5RMTFfcSkgKyBnZ3RpdGxlKCJCeSBhZ2UgZ3JvdXAiKQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhwcGFnZWNhdCwgZmlsbCA9IFExMV9yKSArIGZhY2V0X3dyYXAoflExMV9xKQpwMiArIGdlb21fYmFyKCkgKyBhZXMoUTExX3EsIGZpbGwgPSBwcGFnZWNhdCkgKyBmYWNldF93cmFwKH5RMTFfcikKcDIgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICdmaWxsJykgKyBhZXMoUTExX3EsIGZpbGwgPSBwcGFnZWNhdCkgKyBmYWNldF93cmFwKH5RMTFfcikgKyBnZ3RpdGxlKCJCeSBhZ2UgZ3JvdXAiKQpwMiArIGdlb21fYmFyKCkgKyBhZXMocHBhZ2VjYXQsIGZpbGwgPSBwcGFnZWNhdCkgKyBmYWNldF9ncmlkKFExMV9xflExMV9yKSArIHB0ZXh0MgoKCiMgYnkgZXRobmljIGdyb3VwCnAyICsgZ2VvbV9iYXIoKSArIGFlcyhQUEVUSE0sIGZpbGwgPSBRMTFfcikgKyBmYWNldF93cmFwKH5RMTFfcSkgKyBnZ3RpdGxlKCJCeSBldGhuaWMgZ3JvdXAiKQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhQUEVUSE0sIGZpbGwgPSBRMTFfcikgKyBmYWNldF93cmFwKH5RMTFfcSkKcDIgKyBnZW9tX2JhcigpICsgYWVzKFExMV9xLCBmaWxsID0gUFBFVEhNKSArIGZhY2V0X3dyYXAoflExMV9yKQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gJ2ZpbGwnKSArIGFlcyhRMTFfcSwgZmlsbCA9IFBQRVRITSkgKyBmYWNldF93cmFwKH5RMTFfcikgKyBnZ3RpdGxlKCJCeSBldGhuaWMgZ3JvdXAiKQpwMiArIGdlb21fYmFyKCkgKyBhZXMoUFBFVEhNLCBmaWxsID0gUFBFVEhNKSArIGZhY2V0X2dyaWQoUTExX3F+UTExX3IpICsgcHRleHQyCnAyICsgZ2VvbV9iYXIoKSArIGFlcyhRMTFfciwgZmlsbCA9IFExMV9yKSArIGZhY2V0X2dyaWQoUTExX3F+UFBFVEhNKSArIHB0ZXh0MgoKCiMgYnkgaW5jb21lCnAyICsgZ2VvbV9iYXIoKSArIGFlcyhQUElOQ0lNUCwgZmlsbCA9IFExMV9yKSArIGZhY2V0X3dyYXAoflExMV9xKSArIGdndGl0bGUoIkJ5IGluY29tZSIpICsgcHRleHQyCnAyICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFBQSU5DSU1QLCBmaWxsID0gUTExX3IpICsgZmFjZXRfd3JhcCh+UTExX3EpICsgcHRleHQyCnAyICsgZ2VvbV9iYXIoKSArIGFlcyhRMTFfcSwgZmlsbCA9IFBQSU5DSU1QKSArIGZhY2V0X3dyYXAoflExMV9yKQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gJ2ZpbGwnKSArIGFlcyhRMTFfcSwgZmlsbCA9IFBQSU5DSU1QKSArIGZhY2V0X3dyYXAoflExMV9yKSArIGdndGl0bGUoIkJ5IGluY29tZSBncm91cCIpCnAyICsgZ2VvbV9iYXIoKSArIGFlcyhQUElOQ0lNUCwgZmlsbCA9IFBQSU5DSU1QKSArIGZhY2V0X2dyaWQoUTExX3F+UTExX3IpICsgcHRleHQyCgpgYGAKCiMjIyBFZHVjYXRpb24sIHdvcmssIG1hcml0YWwgc3RhdHVzCgpgYGB7ciBxMTEtcGxvdC0yfQojIHVwZGF0ZSB3ZWlnaHRlZCBkYXRhIGZyYW1lCnExMS4yIDwtIGRhdGEuZnJhbWUoc3Z5dGFibGUoflExMV9xICsgUTExX3IgKyBQUEVEVUMgKyBQUEVEVUNBVCArIHdvcmsgKyBQUFdPUksgKyBtYXJpdGFsICsgUFBNQVJJVCwgZGVzMTEsIHJvdW5kID0gVCkpCgojIHJlc3RhdGUgcGxvdHMKcDMgPC0gZ2dwbG90KHExMS4yW3ExMS4yJFExMV9yICE9ICJEb25fdCBLbm93IiwgXSwgYWVzKFExMV9xLCB3ZWlnaHQgPSBGcmVxKSkgKyBwdGV4dApgYGAKCmBgYHtyIHExMS1wbG90LTJifQojIGJ5IGVkdWNhdGlvbgpwMyArIGdlb21fYmFyKCkgKyBhZXMoUFBFRFVDQVQsIGZpbGwgPSBRMTFfcikgKyBmYWNldF93cmFwKH5RMTFfcSkgKyBnZ3RpdGxlKCJCeSBlZHVjYXRpb24iKQpwMyArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhQUEVEVUNBVCwgZmlsbCA9IFExMV9yKSArIGZhY2V0X3dyYXAoflExMV9xKQpwMyArIGdlb21fYmFyKCkgKyBhZXMoUTExX3EsIGZpbGwgPSBQUEVEVUNBVCkgKyBmYWNldF93cmFwKH5RMTFfcikKcDMgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICdmaWxsJykgKyBhZXMoUTExX3EsIGZpbGwgPSBQUEVEVUNBVCkgKyBmYWNldF93cmFwKH5RMTFfcikgKyBnZ3RpdGxlKCJCeSBlZHVjYXRpb24iKQpwMyArIGdlb21fYmFyKCkgKyBhZXMoUFBFRFVDQVQsIGZpbGwgPSBQUEVEVUNBVCkgKyBmYWNldF9ncmlkKFExMV9xflExMV9yKSArIHB0ZXh0MgpwMyArIGdlb21fYmFyKCkgKyBhZXMoUTExX3IsIGZpbGwgPSBRMTFfcikgKyBmYWNldF9ncmlkKFExMV9xflBQRURVQ0FUKSArIHB0ZXh0MgoKCiMgYnkgd29yawpwMyArIGdlb21fYmFyKCkgKyBhZXMod29yaywgZmlsbCA9IFExMV9yKSArIGZhY2V0X3dyYXAoflExMV9xKSArIGdndGl0bGUoIkJ5IGVtcGxveW1lbnQgc3RhdHVzIikKcDMgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMod29yaywgZmlsbCA9IFExMV9yKSArIGZhY2V0X3dyYXAoflExMV9xKQoKCiMgYnkgbWFyaXRhbApwMyArIGdlb21fYmFyKCkgKyBhZXMobWFyaXRhbCwgZmlsbCA9IFExMV9yKSArIGZhY2V0X3dyYXAoflExMV9xKSArIGdndGl0bGUoIkJ5IG1hcml0YWwgc3RhdHVzIikKcDMgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMobWFyaXRhbCwgZmlsbCA9IFExMV9yKSArIGZhY2V0X3dyYXAoflExMV9xKQoKYGBgCgojIyMgTWV0cm8gc3RhdHVzLCByZWdpb24sIHN0YXRlLCBob3VzZSB0eXBlLCBob3VzaW5nIHN0YXR1cywgaW50ZXJuZXQgYXZhaWxhYmlsaXR5CgpgYGB7ciBxMTEtcGxvdC0zfQojIHVwZGF0ZSB3ZWlnaHRlZCBkYXRhIGZyYW1lCnExMS4zIDwtIGRhdGEuZnJhbWUoc3Z5dGFibGUoflExMV9xICsgUTExX3IgKyBQUE1TQUNBVCArIHBwcmVnOSArIFBQU1RBVEVOICsgUFBIT1VTRSArIFBQUkVOVCArIFBQTkVULCBkZXMxMSwgcm91bmQgPSBUKSkKCiMgcmVzdGF0ZSBwbG90cwpwNCA8LSBnZ3Bsb3QocTExLjNbcTExLjMkUTExX3IgIT0gIkRvbl90IEtub3ciLCBdLCBhZXMoUTExX3EsIHdlaWdodCA9IEZyZXEpKSArIHB0ZXh0CmBgYAoKYGBge3IgcTExLXBsb3QtM2J9CiMgYnkgbWV0cm8gc3RhdHVzCnA0ICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFExMV9yLCBmaWxsID0gUFBNU0FDQVQpICsgZmFjZXRfd3JhcCh+UTExX3EpICsgZ2d0aXRsZSgiQnkgbWV0cm8gc3RhdHVzIikKcDQgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoUFBNU0FDQVQsIGZpbGwgPSBRMTFfcikgKyBmYWNldF93cmFwKH5RMTFfcSkKCiMgYnkgcmVnaW9uCnA0ICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFExMV9yLCBmaWxsID0gcHByZWc5KSArIGZhY2V0X3dyYXAoflExMV9xKSArIGdndGl0bGUoIkJ5IHJlZ2lvbiIpCnA0ICsgZ2VvbV9iYXIoKSArIGFlcyhwcHJlZzksIGZpbGwgPSBRMTFfcikgKyBmYWNldF93cmFwKH5RMTFfcSkgKyBnZ3RpdGxlKCJCeSByZWdpb24iKQoKIyBieSBzdGF0ZQpwNCArIGdlb21fYmFyKCkgKyBhZXMoUTExX3IsIGZpbGwgPSBQUFNUQVRFTikgKyBmYWNldF93cmFwKH5RMTFfcSkgKyBnZ3RpdGxlKCJCeSBzdGF0ZSIpCnA0ICsgZ2VvbV9iYXIoKSArIGFlcyhQUFNUQVRFTiwgZmlsbCA9IFExMV9xKSArIGNvb3JkX2ZsaXAoKSArIGdndGl0bGUoIkJ5IHN0YXRlIikKCiMgYnkgaG91c2UgdHlwZQpwNCArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhRMTFfciwgZmlsbCA9IFBQSE9VU0UpICsgZmFjZXRfd3JhcCh+UTExX3EpCnA0ICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKGZpbGwgPSBQUEhPVVNFKSArIGdndGl0bGUoIkJ5IGhvdXNlIHR5cGUiKQoKIyBob3VzaW5nIHN0YXR1cwpwNCArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhRMTFfciwgZmlsbCA9IFBQSE9VU0UpICsgZmFjZXRfd3JhcCh+UTExX3EpCnA0ICsgZ2VvbV9iYXIoKSArIGFlcyhQUEhPVVNFLCBmaWxsID0gUTExX3IpICsgZmFjZXRfd3JhcCh+UTExX3EpICsgZ2d0aXRsZSgiQnkgaG91c2luZyIpCgojIGJ5IGludGVybmV0IGF2YWlsYWJpbGl0eQpwNCArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhRMTFfciwgZmlsbCA9IFBQTkVUKSArIGZhY2V0X3dyYXAoflExMV9xKQpwNCArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhQUE5FVCwgZmlsbCA9IFExMV9yKSArIGZhY2V0X3dyYXAoflExMV9xKSArIGdndGl0bGUoIkJ5IGludGVybmV0IGF2YWlsYWJpbGl0eSIpCgpgYGAKCgoKIyMgUTIwLiBIb3cgZWZmZWN0aXZlIGRvIHlvdSB0aGluayB0aGUgaW5mbHVlbnphIHZhY2NpbmUgaXMgaW4gcHJvdGVjdGluZyBwZW9wbGUgZnJvbSBiZWNvbWluZyBzaWNrIHdpdGggaW5mbHVlbnphPwoKIyMjIEdlbmRlciwgYWdlLCBldGhuaWNpdHksIGluY29tZSwgZWR1Y2F0aW9uCgpgYGB7ciBxMjAtcGxvdC0xfQojIHdlaWdodGVkIGRhdGEgZnJhbWUKcTIwIDwtIGRhdGEuZnJhbWUoc3Z5dGFibGUoflEyMCArIFBQR0VOREVSICsgcHBhZ2VjYXQgKyBQUEVUSE0gKyBQUElOQ0lNUCArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBQRURVQyArIFBQRURVQ0FULCBkZXMsIHJvdW5kID0gVCkpCgojIHBsb3QgdGVtcGxhdGVzCnRpdGxlIDwtIGdndGl0bGUoIkhvdyBlZmZlY3RpdmUgZG8geW91IHRoaW5rIHRoZSBpbmZsdWVuemEgdmFjY2luZSBpcyBpbiBwcm90ZWN0aW5nIHBlb3BsZSBmcm9tIGJlY29taW5nIHNpY2sgd2l0aCBpbmZsdWVuemE/IikKCiMjIG1haW4gcGxvdApwIDwtIGdncGxvdChxMjAsIGFlcyhRMjAsIHdlaWdodCA9IEZyZXEpKSArIHB0ZXh0CnAgKyBnZW9tX2JhcigpICsgdGl0bGUKYGBgCgpgYGB7ciBxMjAtcGxvdC0xYn0KIyMgcGxvdDI6IGV4Y2x1ZGUgJ0Rvbl90IGtub3cnIGNvbHVtbgpwMiA8LSBnZ3Bsb3QocTIwWyEocTIwJFEyMCk9PSdEb25fdCBrbm93JywgXSwgYWVzKFEyMCwgd2VpZ2h0ID0gRnJlcSkpICsgcHRleHQKCiMgYnkgZ2VuZGVyCnAgKyBnZW9tX2JhcigpICsgYWVzKFBQR0VOREVSLCBmaWxsID0gUFBHRU5ERVIpICsgZmFjZXRfd3JhcCh+UTIwKSsgZ2d0aXRsZSgiQnkgZ2VuZGVyIikKcCArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhQUEdFTkRFUiwgZmlsbCA9IFEyMCkKCiMgYWdlIGJveHBsb3QKc3Z5Ym94cGxvdChQUEFHRX5RMjAsIGRlcywgbWFpbiA9ICJBZ2UgYm94cGxvdCBwZXIgcmVzcG9uc2UiKQoKIyBieSBhZ2UgZ3JvdXAKcCArIGdlb21fYmFyKCkgKyBhZXMocHBhZ2VjYXQsIGZpbGwgPSBwcGFnZWNhdCkgKyBmYWNldF93cmFwKH5RMjApICsgZ2d0aXRsZSgiQnkgYWdlIGdyb3VwIikKcCArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhwcGFnZWNhdCwgZmlsbCA9IFEyMCkgKyBnZ3RpdGxlKCJCeSBhZ2UgZ3JvdXAiKQoKIyBieSBldGhuaWMgZ3JvdXAKcCArIGdlb21fYmFyKCkgKyBhZXMoUFBFVEhNLCBmaWxsID0gUFBFVEhNKSArIGZhY2V0X3dyYXAoflEyMCkgKyBnZ3RpdGxlKCJCeSBldGhuaWMgZ3JvdXAiKQpwICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFBQRVRITSwgZmlsbCA9IFEyMCkgKyBnZ3RpdGxlKCJCeSBldGhuaWMgZ3JvdXAiKQpwICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKGZpbGwgPSBQUEVUSE0pCnAgKyBnZW9tX2JhcigpICsgYWVzKGZpbGwgPSBQUEVUSE0pICsgZ2d0aXRsZSgiQnkgZXRobmljIGdyb3VwIikKcCArIGdlb21fYmFyKCkgKyBhZXMoZmlsbCA9IFEyMCkgKyBmYWNldF93cmFwKH5QUEVUSE0pICsgZ2d0aXRsZSgiQnkgZXRobmljIGdyb3VwIikKCiMgYnkgaW5jb21lCnAyICsgZ2VvbV9iYXIoKSArIGFlcyhQUElOQ0lNUCwgZmlsbCA9IFBQSU5DSU1QKSArIGZhY2V0X3dyYXAoflEyMCkgKyBwdGV4dDIgKyBnZ3RpdGxlKCJCeSBpbmNvbWUiKQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhQUElOQ0lNUCwgZmlsbCA9IFEyMCkgKyBnZ3RpdGxlKCJCeSBpbmNvbWUiKQpwMiArIGdlb21fYmFyKCkgKyBhZXMoZmlsbCA9IFEyMCkgKyBmYWNldF93cmFwKH5QUElOQ0lNUCkgKyBnZ3RpdGxlKCJCeSBpbmNvbWUiKQpwMiArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhmaWxsID0gUFBJTkNJTVApICsgZ2d0aXRsZSgiQnkgaW5jb21lIikKCiMgYnkgZWR1Y2F0aW9uCnAgKyBnZW9tX2JhcigpICsgYWVzKFBQRURVQywgZmlsbCA9IFBQRURVQykgKyBmYWNldF93cmFwKH5RMjApICsgcHRleHQyICsgZ2d0aXRsZSgiQnkgZWR1Y2F0aW9uIikKcCArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhQUEVEVUMsIGZpbGwgPSBRMjApICsgZ2d0aXRsZSgiQnkgZWR1Y2F0aW9uIikKcCArIGdlb21fYmFyKCkgKyBhZXMoZmlsbCA9IFEyMCkgKyBmYWNldF93cmFwKH5QUEVEVUMpICsgZ2d0aXRsZSgiQnkgZWR1Y2F0aW9uIikKcCArIGdlb21fYmFyKHBvc2l0aW9uID0gImRvZGdlIikgKyBhZXMoZmlsbCA9IFBQRURVQ0FUKSArIGdndGl0bGUoIkJ5IGVkdWNhdGlvbiIpCnAgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMoZmlsbCA9IFBQRURVQ0FUKSArIGdndGl0bGUoIkJ5IGVkdWNhdGlvbiIpCgpgYGAKCiMjIyBNYXJpdGFsIHN0YXR1cywgbWV0cm8gc3RhdHVzLCByZWdpb24sIHN0YXRlIG9mIHJlc2lkZW5jeSwgaG91c2UgdHlwZSwgaG91c2luZyBzdGF0dXMsIGludGVybmV0IGF2YWlsYWJpbGl0eQoKYGBge3IgcTIwLXBsb3QtMn0KIyB1cGRhdGUgd2VpZ2h0ZWQgZGF0YSBmcmFtZQpxMjAuMiA8LSBkYXRhLmZyYW1lKHN2eXRhYmxlKH5RMjAgKyBtYXJpdGFsICsgUFBNQVJJVCArIFBQTVNBQ0FUICsgcHByZWc5ICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUFNUQVRFTiArIFBQSE9VU0UgKyBQUFJFTlQgKyBQUE5FVCwgZGVzLCByb3VuZCA9IFQpKQojIHJlc3RhdGUgcGxvdHMKcDMgPC0gZ2dwbG90KHEyMC4yLCBhZXMoUTIwLCB3ZWlnaHQgPSBGcmVxKSkgKyBwdGV4dApwNCA8LSBnZ3Bsb3QocTIwLjJbIShxMjAuMiRRMjApPT0nRG9uX3Qga25vdycsIF0sIGFlcyhRMjAsIHdlaWdodCA9IEZyZXEpKSArIHB0ZXh0CmBgYAoKYGBge3IgcTIwLXBsb3QtMmJ9CiMgYnkgbWFyaXRhbApwMyArIGdlb21fYmFyKCkgKyBhZXMobWFyaXRhbCwgZmlsbCA9IG1hcml0YWwpICsgZmFjZXRfd3JhcCh+UTIwKSArIGdndGl0bGUoIkJ5IG1hcml0YWwgc3RhdHVzIikKcDMgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMobWFyaXRhbCwgZmlsbCA9IFEyMCkKcDMgKyBnZW9tX2JhcigpICsgYWVzKFBQTUFSSVQsIGZpbGwgPSBQUE1BUklUKSArIGZhY2V0X3dyYXAoflEyMCkKcDMgKyBnZW9tX2JhcigpICsgYWVzKFBQTUFSSVQsIGZpbGwgPSBRMjApICsgZ2d0aXRsZSgiQnkgbWFyaXRhbCBzdGF0dXMiKQpwMyArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhQUE1BUklULCBmaWxsID0gUTIwKSArIGdndGl0bGUoIkJ5IG1hcml0YWwgc3RhdHVzIikKCiMgYnkgbWV0cm8KcDMgKyBnZW9tX2JhcigpICsgYWVzKGZpbGwgPSBQUE1TQUNBVCkgKyBnZ3RpdGxlKCJCeSBtZXRybyBzdGF0dXMiKQpwMyArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhQUE1TQUNBVCwgZmlsbCA9IFEyMCkKCiMgYnkgcmVnaW9uCnAzICsgZ2VvbV9iYXIoKSArIGFlcyhwcHJlZzksIGZpbGwgPSBwcHJlZzkpICsgZmFjZXRfd3JhcCh+UTIwKSsgZ2d0aXRsZSgiQnkgcmVnaW9uIikKcDMgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJmaWxsIikgKyBhZXMocHByZWc5LCBmaWxsID0gUTIwKSArIGdndGl0bGUoIlVTIHJlZ2lvbnMgYnkgcmVzcG9uc2UiKQpwMyArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhmaWxsID0gcHByZWc5KSArIGdndGl0bGUoIlJlc3BvbnNlcyBieSBVUyByZWdpb24iKQoKIyBieSBzdGF0ZQpwMyArIGdlb21fYmFyKCkgKyBhZXMoUFBTVEFURU4sIGZpbGwgPSBRMjApICsgY29vcmRfZmxpcCgpICsgZ2d0aXRsZSgiQnkgc3RhdGUiKQpwMyArIGdlb21fYmFyKHBvc2l0aW9uID0gJ2ZpbGwnKSArIGFlcyhQUFNUQVRFTiwgZmlsbCA9IFEyMCkgKyBjb29yZF9mbGlwKCkgKyBnZ3RpdGxlKCJCeSBzdGF0ZSIpCgojIGJ5IGhvdXNlIHR5cGUKcDMgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICdmaWxsJykgKyBhZXMoZmlsbCA9IFBQSE9VU0UpICsgZ2d0aXRsZSgiQnkgaG91c2UgdHlwZSIpCnAzICsgZ2VvbV9iYXIoKSArIGFlcyhmaWxsID0gUTIwKSArIGZhY2V0X3dyYXAoflBQSE9VU0UpICsgZ2d0aXRsZSgiQnkgaG91c2UgdHlwZSIpCnAzICsgZ2VvbV9iYXIoKSArIGFlcyhQUEhPVVNFLCBmaWxsID0gUTIwKSArIGdndGl0bGUoIkJ5IGhvdXNlIHR5cGUiKQpwMyArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhQUEhPVVNFLCBmaWxsID0gUTIwKSArIGdndGl0bGUoIkJ5IGhvdXNlIHR5cGUiKQoKIyBieSBob3VzaW5nIHN0YXR1cwpwMyArIGdlb21fYmFyKCkgKyBhZXMoZmlsbCA9IFBQUkVOVCkgKyBnZ3RpdGxlKCJCeSBob3VzaW5nIHN0YXR1cyIpCnAzICsgZ2VvbV9iYXIocG9zaXRpb24gPSAnZmlsbCcpICsgYWVzKGZpbGwgPSBQUFJFTlQpCnAzICsgZ2VvbV9iYXIoKSArIGFlcyhQUFJFTlQsIGZpbGwgPSBRMjApICsgZ2d0aXRsZSgiQnkgaG91c2luZyBzdGF0dXMiKQpwMyArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhQUFJFTlQsIGZpbGwgPSBRMjApICsgZ2d0aXRsZSgiQnkgaG91c2luZyBzdGF0dXMiKQoKIyBieSBpbnRlcm5ldCBhdmFpbGFiaWxpdHkKcDMgKyBnZW9tX2JhcigpICsgYWVzKGZpbGwgPSBQUE5FVCkgKyBnZ3RpdGxlKCJJbnRlcm5ldCBzdGF0dXMiKQpwMyArIGdlb21fYmFyKHBvc2l0aW9uID0gImZpbGwiKSArIGFlcyhmaWxsID0gUFBORVQpICsgZ2d0aXRsZSgiSW50ZXJuZXQgc3RhdHVzIikKcDMgKyBnZW9tX2Jhcihwb3NpdGlvbiA9ICJkb2RnZSIpICsgYWVzKFBQTkVULCBmaWxsID0gUTIwKSArIGdndGl0bGUoIkludGVybmV0IHN0YXR1cyIpCnAzICsgZ2VvbV9iYXIocG9zaXRpb24gPSAiZmlsbCIpICsgYWVzKFBQTkVULCBmaWxsID0gUTIwKSArIGdndGl0bGUoIkludGVybmV0IHN0YXR1cyIpCgpgYGAKCg==